package com.huayi.datagovernance.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.huayi.datagovernance.entity.TYwTask;
import com.huayi.datagovernance.entity.TYwTaskYk;
import com.huayi.datagovernance.vo.ResponseResult;
import com.huayi.datagovernance.vo.WorkOrderPageVo;

import java.util.List;
import java.util.Map;

/**
 * 设备模型服务-接口
 *
 * @version 1.0
 * @date 2021/4/21 20:26
 */
public interface DeviceService {
    /**
     * 任务出图
     *
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     * @date 2021/4/21 21:20
     */
    ResponseResult<JSONObject> outPic(JSONObject jsonObject);

    /**
     * 获取设备信息（资源+图形）
     *
     * @param jsonObject
     * @return java.util.List<com.alibaba.fastjson.JSONObject>
     * @date 2021/4/21 21:20
     */
    List<JSONObject> getDeviceInfoList(JSONObject jsonObject);

    /**
     * 获取设备信息（台区）
     *
     * @param jsonObject
     * @return java.util.List<com.alibaba.fastjson.JSONObject>
     * @date 2021/4/21 22:23
     */
    List<JSONObject> getDeviceTqList(JSONObject jsonObject);

    /**
     * 格式化出图数据 kmpic格式
     *
     * @param deviceList 设备信息
     * @param gdtype     工单类型
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     * @date 2021/4/21 22:43
     */
    ResponseResult<JSONObject> formatOutPic(List<JSONObject> deviceList, int gdtype);

    /**
     * 获取工单任务列表(分页，自定义参数）
     *
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.baomidou.mybatisplus.core.metadata.IPage < com.huayi.datagovernance.vo.WorkOrderPageVo>>
     * @date 2021/4/23 9:20
     */
    ResponseResult<IPage<WorkOrderPageVo>> getWorkOrderPage(JSONObject jsonObject);

    /**
     * 查询设备信息(新建设备和下发设备)
     *
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult
     * @date 2021/4/23 9:20
     */
    ResponseResult<JSONObject> getDeviceInfo(JSONObject jsonObject);

    /**
     * 获取线路列表
     *
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<java.lang.Object>
     * @date 2021/4/23 16:42
     */
    ResponseResult<Object> getXlList(JSONObject jsonObject);

    /**
     * 工单任务提交
     *
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     * @date 2021/4/23 16:43
     */
    ResponseResult<TYwTask> commitTask(JSONObject jsonObject);

    /**
     * 推送到Gis(任务提交)
     *
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult
     * @date 2021/4/25 10:56
     */
    ResponseResult sendToGis(JSONObject jsonObject);

    /**
     * 自动建模接口3 (入参的数据格式区分表，离线)
     *
     * @param object
     * @return com.huayi.datagovernance.vo.ResponseResult
     * @date 2021/4/25 16:43
     */
    ResponseResult autoCreateModel3(JSONObject object);

    /**
     * 自动建模接口2 (入参的数据格式区分表，针对新增线路)
     * @param object
     * @return
     */
    ResponseResult autoCreateModel2(JSONObject object);

    /**
     * 获取设备信息（资源+图形）离线版建模
     * @date 2021/4/26 15:16
     * @param jsonObject
     * @return java.util.List<com.alibaba.fastjson.JSONObject>
     */
    List<JSONObject> getDeviceList2(JSONObject jsonObject);

    /**
     *获取 传入设备信息+表名（新增数据）_ver表 sql
     * 独立，适用于 DeviceCreateService.autoCreateModel3 离线版方法
     * @date 2021/4/26 15:16
     * @param device
     * @param tableName
     * @param offset
     * @return com.alibaba.fastjson.JSONObject
     */
    JSONObject getInsertDeviceSql2(JSONObject device, String tableName, List<Double> offset);

    /**
     * 传入设备信息+表名（新增数据）_ver表
     * 独立，适用于 DeviceCreateService.autoCreateModel2 方法
     * @date 2021/4/26 15:15
     * @param device
     * @param tableName
     * @param offset
     * @return com.huayi.datagovernance.vo.ResponseResult
     */
    ResponseResult insertDevice2(JSONObject device, String tableName, List<Double> offset);

    /**
     新建拓扑关系 sql
     *
     * @date 2021/4/26 15:15
     * @param jsonObject
     * @param terminalid 建模设备的terminalid(连接点的编号)
     * @param cons 端子号集合
     * @return com.alibaba.fastjson.JSONObject
     */
    JSONObject insertTopoSql(JSONObject jsonObject, int terminalid, String[] cons);

    /**
     * 获取当前设备的所有问题列表
     * @date 2021/4/26 16:26
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<java.util.List<com.alibaba.fastjson.JSONObject>>
     */
    ResponseResult<List<JSONObject>> getCurrentDevicePros(JSONObject jsonObject);

    /**
     * 获取设备新的序列号
     * newSerno 图形OID
     * newConno 端子号oid
     * newSBID sbid
     * newSerZyno 资源oid
     * @author wuch
     * @date 2021/4/26 16:26
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     */
    ResponseResult<JSONObject> getNewSer(JSONObject jsonObject);

    /**
     * 查询朗新工单明细
     * 主要是变压器的清单
     * @date 2021/4/26 16:51
     * @param gdType 工单类型
     * @param taskId
     * @return java.util.List<TYwTaskYk>
     */
    List<TYwTaskYk> getWorkOrderDetail(String gdType, String taskId);

    /**
     * 新建线路
     * @date 2021/4/26 17:09
     * @param object
     * @return com.huayi.datagovernance.vo.ResponseResult
     */
    ResponseResult insertXL(JSONObject object);

    /**
     * 新建拓扑关系
     * @date 2021/4/26 17:48
     * @param jsonObject
     * @param terminalid
     * @return com.huayi.datagovernance.vo.ResponseResult
     */
    ResponseResult insertTopo(JSONObject jsonObject,int terminalid);

    /**
     * 根据条件从台区获取设备列表
     * @date 2021/4/27 11:23
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.baomidou.mybatisplus.core.metadata.IPage<com.alibaba.fastjson.JSONObject>>
     */
    ResponseResult<IPage<JSONObject>> getDevicesFromTQ(JSONObject jsonObject);

    /**
     * 根据当前设备获取周围设备的topo关系
     * @date 2021/4/27 11:23
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<java.util.List<com.alibaba.fastjson.JSONObject>>
     */
    ResponseResult<List<JSONObject>> getTopDevices(JSONObject jsonObject);

    /**
     * 修改设备信息（包括坐标）
     * @date 2021/4/27 15:00
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     */
    ResponseResult<JSONObject> updateDeviceShape(JSONObject jsonObject);

    /**
     * 删除设备信息（包括坐标）
     * @date 2021/4/27 17:31
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     */
    ResponseResult<JSONObject> deleteDevices(JSONObject jsonObject);

    /**
     * 动态获取设备表单信息
     * @date 2021/4/27 17:54
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<java.util.List<java.util.Map<java.lang.String,java.lang.Object>>>
     */
    ResponseResult dynamicDeviceForm(JSONObject jsonObject);

    /**
     * 工单任务数量统计（首页待办和已办）
     * @date 2021/4/29 9:15
     * @param jsonObject
     * @return com.huayi.datagovernance.vo.ResponseResult<com.alibaba.fastjson.JSONObject>
     */
    ResponseResult<JSONObject> getStatisticsForTask(JSONObject jsonObject);
}
